{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Areal Project"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div>\n",
    "<img src=\"logo.jpg\" width=150 ALIGN=\"left\" border=\"20\">\n",
    "<h1> Starting Kit for preprocessed data</h1>\n",
    "<br>This code was tested with <br>\n",
    "Python 3.6.7 <br>\n",
    "Created by Areal Team <br><br>\n",
    "ALL INFORMATION, SOFTWARE, DOCUMENTATION, AND DATA ARE PROVIDED \"AS-IS\". The CDS, CHALEARN, AND/OR OTHER ORGANIZERS OR CODE AUTHORS DISCLAIM ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE, AND THE WARRANTY OF NON-INFRIGEMENT OF ANY THIRD PARTY'S INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL AUTHORS AND ORGANIZERS BE LIABLE FOR ANY SPECIAL, \n",
    "INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF SOFTWARE, DOCUMENTS, MATERIALS, PUBLICATIONS, OR INFORMATION MADE AVAILABLE FOR THE CHALLENGE. \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div>\n",
    "    <h2>Introduction </h2>\n",
    "     <br>\n",
    "Aerial imagery has been a primary source of geographic data for quite a long time. With technology progress, aerial imagery became really practical for remote sensing : the science of obtaining information about an object, area or phenomenon.\n",
    "Nowadays, there are many uses of image recognition spanning from robotics/drone vision to autonomous driving vehicules or face detection.\n",
    "<br>\n",
    "In this challenge, we will use pre-processed data, coming from landscape images. The goal is to learn to differentiate common and uncommon landscapes such as a beach, a lake or a meadow.\n",
    "    Data comes from part of the data set (NWPU-RESISC45) originally used in <a href=\"https://arxiv.org/pdf/1703.00121.pdf?fbclid=IwAR16qo-EX_Z05ZpxvWG8F-oBU0SlnY-3BPCWBVVOGPyJcVy7BBqCKjnsvJo\">Remote Sensing Image Scene Classification</a>. This data set contains 45 categories while we only kept 13 out of them.\n",
    "\n",
    "References and credits: \n",
    "Yuliya Tarabalka, Guillaume Charpiat, Nicolas Girard for the data sets presentation.<br>\n",
    "Gong Cheng, Junwei Han, and Xiaoqiang Lu, for the original article on the chosen data set.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Requirements \n",
    "\n",
    "Our code uses multiple libraries, so the next cell will install python's required dependencies (probably only possible on your personal computers). In case you don't want to, or are running in the competition's docker, you can comment it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install --user -r requirements.txt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import random\n",
    "import re"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_dir = \"sample_code_submission/\"\n",
    "result_dir = 'sample_result_submission/' \n",
    "problem_dir = 'ingestion_program/'  \n",
    "score_dir = 'scoring_program/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sys import path; path.append(model_dir); path.append(problem_dir); path.append(score_dir);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div>\n",
    "    <h1> Step 1: Exploratory data analysis </h1>\n",
    "<p>\n",
    "We provide sample_data with the starting kit, but to prepare your submission, you must fetch the public_data from the challenge website and point to it.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div>\n",
    "<img src=\"CNN.png\" width=800 align=\"center\" border=\"20\">\n",
    "We used a special Convolutional Neural Network (CNN) already trained to recognize images in order to create the new data. To create it, we kept the form of the data at three-fourth in the CNN. <br>\n",
    "This new form is highly similar to weights we can see in a classic neural network.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_dir = 'sample_data'\n",
    "data_name = 'Areal'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading sample_data/Areal_train from AutoML format\n",
      "Number of examples = 300\n",
      "Number of features = 1024\n",
      "        Class\n",
      "0       beach\n",
      "1   chaparral\n",
      "2       cloud\n",
      "3      desert\n",
      "4      forest\n",
      "5      island\n",
      "6        lake\n",
      "7      meadow\n",
      "8    mountain\n",
      "9       river\n",
      "10        sea\n",
      "11   snowberg\n",
      "12    wetland\n",
      "Number of classes = 13\n"
     ]
    }
   ],
   "source": [
    "from ingestion_program.data_io import read_as_df\n",
    "data = read_as_df(data_dir  + '/' + data_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature_1</th>\n",
       "      <th>feature_2</th>\n",
       "      <th>feature_3</th>\n",
       "      <th>feature_4</th>\n",
       "      <th>feature_5</th>\n",
       "      <th>feature_6</th>\n",
       "      <th>feature_7</th>\n",
       "      <th>feature_8</th>\n",
       "      <th>feature_9</th>\n",
       "      <th>feature_10</th>\n",
       "      <th>...</th>\n",
       "      <th>feature_1016</th>\n",
       "      <th>feature_1017</th>\n",
       "      <th>feature_1018</th>\n",
       "      <th>feature_1019</th>\n",
       "      <th>feature_1020</th>\n",
       "      <th>feature_1021</th>\n",
       "      <th>feature_1022</th>\n",
       "      <th>feature_1023</th>\n",
       "      <th>feature_1024</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.106071</td>\n",
       "      <td>0.001777</td>\n",
       "      <td>0.004327</td>\n",
       "      <td>0.011661</td>\n",
       "      <td>0.015068</td>\n",
       "      <td>0.010906</td>\n",
       "      <td>0.019826</td>\n",
       "      <td>0.047200</td>\n",
       "      <td>0.009014</td>\n",
       "      <td>0.011369</td>\n",
       "      <td>...</td>\n",
       "      <td>0.035866</td>\n",
       "      <td>0.007674</td>\n",
       "      <td>0.011295</td>\n",
       "      <td>0.006992</td>\n",
       "      <td>0.035666</td>\n",
       "      <td>0.013637</td>\n",
       "      <td>0.054297</td>\n",
       "      <td>0.076698</td>\n",
       "      <td>0.084652</td>\n",
       "      <td>snowberg</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.069425</td>\n",
       "      <td>0.000921</td>\n",
       "      <td>0.018868</td>\n",
       "      <td>0.030748</td>\n",
       "      <td>0.019744</td>\n",
       "      <td>0.003433</td>\n",
       "      <td>0.031509</td>\n",
       "      <td>0.064145</td>\n",
       "      <td>0.043115</td>\n",
       "      <td>0.034331</td>\n",
       "      <td>...</td>\n",
       "      <td>0.025870</td>\n",
       "      <td>0.006954</td>\n",
       "      <td>0.072719</td>\n",
       "      <td>0.008778</td>\n",
       "      <td>0.031796</td>\n",
       "      <td>0.052533</td>\n",
       "      <td>0.026997</td>\n",
       "      <td>0.064874</td>\n",
       "      <td>0.023625</td>\n",
       "      <td>island</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.092052</td>\n",
       "      <td>0.000067</td>\n",
       "      <td>0.012185</td>\n",
       "      <td>0.021340</td>\n",
       "      <td>0.009253</td>\n",
       "      <td>0.010788</td>\n",
       "      <td>0.027914</td>\n",
       "      <td>0.043856</td>\n",
       "      <td>0.009098</td>\n",
       "      <td>0.015725</td>\n",
       "      <td>...</td>\n",
       "      <td>0.019264</td>\n",
       "      <td>0.007737</td>\n",
       "      <td>0.017554</td>\n",
       "      <td>0.004777</td>\n",
       "      <td>0.074484</td>\n",
       "      <td>0.019736</td>\n",
       "      <td>0.034742</td>\n",
       "      <td>0.062472</td>\n",
       "      <td>0.017112</td>\n",
       "      <td>forest</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.123751</td>\n",
       "      <td>0.002270</td>\n",
       "      <td>0.001138</td>\n",
       "      <td>0.042464</td>\n",
       "      <td>0.053743</td>\n",
       "      <td>0.016156</td>\n",
       "      <td>0.060952</td>\n",
       "      <td>0.077559</td>\n",
       "      <td>0.025709</td>\n",
       "      <td>0.034909</td>\n",
       "      <td>...</td>\n",
       "      <td>0.010575</td>\n",
       "      <td>0.006195</td>\n",
       "      <td>0.045711</td>\n",
       "      <td>0.003325</td>\n",
       "      <td>0.021387</td>\n",
       "      <td>0.053118</td>\n",
       "      <td>0.031510</td>\n",
       "      <td>0.088904</td>\n",
       "      <td>0.071321</td>\n",
       "      <td>island</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.095870</td>\n",
       "      <td>0.001628</td>\n",
       "      <td>0.006228</td>\n",
       "      <td>0.023276</td>\n",
       "      <td>0.009811</td>\n",
       "      <td>0.010350</td>\n",
       "      <td>0.119979</td>\n",
       "      <td>0.102470</td>\n",
       "      <td>0.018967</td>\n",
       "      <td>0.020871</td>\n",
       "      <td>...</td>\n",
       "      <td>0.004668</td>\n",
       "      <td>0.004444</td>\n",
       "      <td>0.009534</td>\n",
       "      <td>0.005907</td>\n",
       "      <td>0.168387</td>\n",
       "      <td>0.033255</td>\n",
       "      <td>0.003384</td>\n",
       "      <td>0.030591</td>\n",
       "      <td>0.015277</td>\n",
       "      <td>chaparral</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1025 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   feature_1  feature_2  feature_3  feature_4  feature_5  feature_6  \\\n",
       "0   0.106071   0.001777   0.004327   0.011661   0.015068   0.010906   \n",
       "1   0.069425   0.000921   0.018868   0.030748   0.019744   0.003433   \n",
       "2   0.092052   0.000067   0.012185   0.021340   0.009253   0.010788   \n",
       "3   0.123751   0.002270   0.001138   0.042464   0.053743   0.016156   \n",
       "4   0.095870   0.001628   0.006228   0.023276   0.009811   0.010350   \n",
       "\n",
       "   feature_7  feature_8  feature_9  feature_10    ...      feature_1016  \\\n",
       "0   0.019826   0.047200   0.009014    0.011369    ...          0.035866   \n",
       "1   0.031509   0.064145   0.043115    0.034331    ...          0.025870   \n",
       "2   0.027914   0.043856   0.009098    0.015725    ...          0.019264   \n",
       "3   0.060952   0.077559   0.025709    0.034909    ...          0.010575   \n",
       "4   0.119979   0.102470   0.018967    0.020871    ...          0.004668   \n",
       "\n",
       "   feature_1017  feature_1018  feature_1019  feature_1020  feature_1021  \\\n",
       "0      0.007674      0.011295      0.006992      0.035666      0.013637   \n",
       "1      0.006954      0.072719      0.008778      0.031796      0.052533   \n",
       "2      0.007737      0.017554      0.004777      0.074484      0.019736   \n",
       "3      0.006195      0.045711      0.003325      0.021387      0.053118   \n",
       "4      0.004444      0.009534      0.005907      0.168387      0.033255   \n",
       "\n",
       "   feature_1022  feature_1023  feature_1024     target  \n",
       "0      0.054297      0.076698      0.084652   snowberg  \n",
       "1      0.026997      0.064874      0.023625     island  \n",
       "2      0.034742      0.062472      0.017112     forest  \n",
       "3      0.031510      0.088904      0.071321     island  \n",
       "4      0.003384      0.030591      0.015277  chaparral  \n",
       "\n",
       "[5 rows x 1025 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature_1</th>\n",
       "      <th>feature_2</th>\n",
       "      <th>feature_3</th>\n",
       "      <th>feature_4</th>\n",
       "      <th>feature_5</th>\n",
       "      <th>feature_6</th>\n",
       "      <th>feature_7</th>\n",
       "      <th>feature_8</th>\n",
       "      <th>feature_9</th>\n",
       "      <th>feature_10</th>\n",
       "      <th>...</th>\n",
       "      <th>feature_1015</th>\n",
       "      <th>feature_1016</th>\n",
       "      <th>feature_1017</th>\n",
       "      <th>feature_1018</th>\n",
       "      <th>feature_1019</th>\n",
       "      <th>feature_1020</th>\n",
       "      <th>feature_1021</th>\n",
       "      <th>feature_1022</th>\n",
       "      <th>feature_1023</th>\n",
       "      <th>feature_1024</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "      <td>300.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.120775</td>\n",
       "      <td>0.003035</td>\n",
       "      <td>0.012286</td>\n",
       "      <td>0.029816</td>\n",
       "      <td>0.022796</td>\n",
       "      <td>0.011357</td>\n",
       "      <td>0.028089</td>\n",
       "      <td>0.056484</td>\n",
       "      <td>0.021844</td>\n",
       "      <td>0.025063</td>\n",
       "      <td>...</td>\n",
       "      <td>0.013223</td>\n",
       "      <td>0.016655</td>\n",
       "      <td>0.011403</td>\n",
       "      <td>0.027674</td>\n",
       "      <td>0.007604</td>\n",
       "      <td>0.059426</td>\n",
       "      <td>0.034883</td>\n",
       "      <td>0.033270</td>\n",
       "      <td>0.040154</td>\n",
       "      <td>0.045940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.034516</td>\n",
       "      <td>0.004182</td>\n",
       "      <td>0.010794</td>\n",
       "      <td>0.027559</td>\n",
       "      <td>0.016298</td>\n",
       "      <td>0.008459</td>\n",
       "      <td>0.022144</td>\n",
       "      <td>0.017805</td>\n",
       "      <td>0.015389</td>\n",
       "      <td>0.014413</td>\n",
       "      <td>...</td>\n",
       "      <td>0.017772</td>\n",
       "      <td>0.011443</td>\n",
       "      <td>0.008887</td>\n",
       "      <td>0.022417</td>\n",
       "      <td>0.004275</td>\n",
       "      <td>0.035726</td>\n",
       "      <td>0.017830</td>\n",
       "      <td>0.030985</td>\n",
       "      <td>0.033919</td>\n",
       "      <td>0.038091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.051355</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000046</td>\n",
       "      <td>0.003137</td>\n",
       "      <td>0.000479</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000191</td>\n",
       "      <td>0.015153</td>\n",
       "      <td>0.000141</td>\n",
       "      <td>0.001333</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.001139</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.002762</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.005204</td>\n",
       "      <td>0.004798</td>\n",
       "      <td>0.000486</td>\n",
       "      <td>0.000687</td>\n",
       "      <td>0.000198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.096800</td>\n",
       "      <td>0.000489</td>\n",
       "      <td>0.004248</td>\n",
       "      <td>0.011659</td>\n",
       "      <td>0.010101</td>\n",
       "      <td>0.004823</td>\n",
       "      <td>0.012591</td>\n",
       "      <td>0.043761</td>\n",
       "      <td>0.009223</td>\n",
       "      <td>0.015776</td>\n",
       "      <td>...</td>\n",
       "      <td>0.001831</td>\n",
       "      <td>0.008007</td>\n",
       "      <td>0.005445</td>\n",
       "      <td>0.012790</td>\n",
       "      <td>0.004795</td>\n",
       "      <td>0.035714</td>\n",
       "      <td>0.021029</td>\n",
       "      <td>0.009940</td>\n",
       "      <td>0.015250</td>\n",
       "      <td>0.017125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.115234</td>\n",
       "      <td>0.001629</td>\n",
       "      <td>0.009212</td>\n",
       "      <td>0.020470</td>\n",
       "      <td>0.018810</td>\n",
       "      <td>0.009804</td>\n",
       "      <td>0.022277</td>\n",
       "      <td>0.055789</td>\n",
       "      <td>0.019688</td>\n",
       "      <td>0.023365</td>\n",
       "      <td>...</td>\n",
       "      <td>0.007524</td>\n",
       "      <td>0.013686</td>\n",
       "      <td>0.009319</td>\n",
       "      <td>0.021877</td>\n",
       "      <td>0.007435</td>\n",
       "      <td>0.051159</td>\n",
       "      <td>0.030635</td>\n",
       "      <td>0.024190</td>\n",
       "      <td>0.030191</td>\n",
       "      <td>0.039073</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.139764</td>\n",
       "      <td>0.003824</td>\n",
       "      <td>0.018444</td>\n",
       "      <td>0.038136</td>\n",
       "      <td>0.031027</td>\n",
       "      <td>0.016193</td>\n",
       "      <td>0.036847</td>\n",
       "      <td>0.065938</td>\n",
       "      <td>0.030548</td>\n",
       "      <td>0.032112</td>\n",
       "      <td>...</td>\n",
       "      <td>0.017248</td>\n",
       "      <td>0.022501</td>\n",
       "      <td>0.014143</td>\n",
       "      <td>0.035120</td>\n",
       "      <td>0.009951</td>\n",
       "      <td>0.079322</td>\n",
       "      <td>0.046225</td>\n",
       "      <td>0.047323</td>\n",
       "      <td>0.057659</td>\n",
       "      <td>0.062446</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.264518</td>\n",
       "      <td>0.030026</td>\n",
       "      <td>0.072500</td>\n",
       "      <td>0.217381</td>\n",
       "      <td>0.075004</td>\n",
       "      <td>0.043993</td>\n",
       "      <td>0.145499</td>\n",
       "      <td>0.122579</td>\n",
       "      <td>0.107858</td>\n",
       "      <td>0.092739</td>\n",
       "      <td>...</td>\n",
       "      <td>0.115501</td>\n",
       "      <td>0.066924</td>\n",
       "      <td>0.065061</td>\n",
       "      <td>0.147605</td>\n",
       "      <td>0.025086</td>\n",
       "      <td>0.192191</td>\n",
       "      <td>0.109442</td>\n",
       "      <td>0.147518</td>\n",
       "      <td>0.202446</td>\n",
       "      <td>0.253949</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 1024 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        feature_1   feature_2   feature_3   feature_4   feature_5   feature_6  \\\n",
       "count  300.000000  300.000000  300.000000  300.000000  300.000000  300.000000   \n",
       "mean     0.120775    0.003035    0.012286    0.029816    0.022796    0.011357   \n",
       "std      0.034516    0.004182    0.010794    0.027559    0.016298    0.008459   \n",
       "min      0.051355    0.000000    0.000046    0.003137    0.000479    0.000000   \n",
       "25%      0.096800    0.000489    0.004248    0.011659    0.010101    0.004823   \n",
       "50%      0.115234    0.001629    0.009212    0.020470    0.018810    0.009804   \n",
       "75%      0.139764    0.003824    0.018444    0.038136    0.031027    0.016193   \n",
       "max      0.264518    0.030026    0.072500    0.217381    0.075004    0.043993   \n",
       "\n",
       "        feature_7   feature_8   feature_9  feature_10      ...       \\\n",
       "count  300.000000  300.000000  300.000000  300.000000      ...        \n",
       "mean     0.028089    0.056484    0.021844    0.025063      ...        \n",
       "std      0.022144    0.017805    0.015389    0.014413      ...        \n",
       "min      0.000191    0.015153    0.000141    0.001333      ...        \n",
       "25%      0.012591    0.043761    0.009223    0.015776      ...        \n",
       "50%      0.022277    0.055789    0.019688    0.023365      ...        \n",
       "75%      0.036847    0.065938    0.030548    0.032112      ...        \n",
       "max      0.145499    0.122579    0.107858    0.092739      ...        \n",
       "\n",
       "       feature_1015  feature_1016  feature_1017  feature_1018  feature_1019  \\\n",
       "count    300.000000    300.000000    300.000000    300.000000    300.000000   \n",
       "mean       0.013223      0.016655      0.011403      0.027674      0.007604   \n",
       "std        0.017772      0.011443      0.008887      0.022417      0.004275   \n",
       "min        0.000000      0.001139      0.000000      0.002762      0.000000   \n",
       "25%        0.001831      0.008007      0.005445      0.012790      0.004795   \n",
       "50%        0.007524      0.013686      0.009319      0.021877      0.007435   \n",
       "75%        0.017248      0.022501      0.014143      0.035120      0.009951   \n",
       "max        0.115501      0.066924      0.065061      0.147605      0.025086   \n",
       "\n",
       "       feature_1020  feature_1021  feature_1022  feature_1023  feature_1024  \n",
       "count    300.000000    300.000000    300.000000    300.000000    300.000000  \n",
       "mean       0.059426      0.034883      0.033270      0.040154      0.045940  \n",
       "std        0.035726      0.017830      0.030985      0.033919      0.038091  \n",
       "min        0.005204      0.004798      0.000486      0.000687      0.000198  \n",
       "25%        0.035714      0.021029      0.009940      0.015250      0.017125  \n",
       "50%        0.051159      0.030635      0.024190      0.030191      0.039073  \n",
       "75%        0.079322      0.046225      0.047323      0.057659      0.062446  \n",
       "max        0.192191      0.109442      0.147518      0.202446      0.253949  \n",
       "\n",
       "[8 rows x 1024 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        target\n",
      "0     snowberg\n",
      "1       island\n",
      "2       forest\n",
      "3       island\n",
      "4    chaparral\n",
      "5        beach\n",
      "6       island\n",
      "7       forest\n",
      "8      wetland\n",
      "9        river\n",
      "10      island\n",
      "11   chaparral\n",
      "12       cloud\n",
      "13        lake\n",
      "14      meadow\n",
      "15       beach\n",
      "16       cloud\n",
      "17        lake\n",
      "18       cloud\n",
      "19        lake\n",
      "20    snowberg\n",
      "21      forest\n",
      "22     wetland\n",
      "23       river\n",
      "24    snowberg\n",
      "25       river\n",
      "26      desert\n",
      "27       river\n",
      "28     wetland\n",
      "29      island\n",
      "..         ...\n",
      "270       lake\n",
      "271   mountain\n",
      "272      river\n",
      "273        sea\n",
      "274       lake\n",
      "275   snowberg\n",
      "276      cloud\n",
      "277  chaparral\n",
      "278  chaparral\n",
      "279        sea\n",
      "280      river\n",
      "281   mountain\n",
      "282    wetland\n",
      "283       lake\n",
      "284  chaparral\n",
      "285        sea\n",
      "286     forest\n",
      "287       lake\n",
      "288      river\n",
      "289      river\n",
      "290    wetland\n",
      "291     island\n",
      "292        sea\n",
      "293      beach\n",
      "294      cloud\n",
      "295     desert\n",
      "296   mountain\n",
      "297     meadow\n",
      "298     meadow\n",
      "299     forest\n",
      "\n",
      "[300 rows x 1 columns]\n"
     ]
    }
   ],
   "source": [
    "print(data.iloc[:, -1:])\n",
    "X = data.iloc[:, :-1]\n",
    "y = data.iloc[:, -1:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualization of values\n",
    "\n",
    "Most values are in the range (0, 5)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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DggAAAAAAACvdp3jCgEAAAAAAGBWRC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAAANURuQAAAAAAAKiOyAUAAAAAAEB1RC4AAAAAAACqI3IBAAAAAABQHZELAAAAAACA6ohcAAAAAAAAVEfkAgAAAAAAoDoiFwAAAAAA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\n",
      "text/plain": [
       "<Figure size 2160x1080 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "plt.figure(figsize=(30,15))\n",
    "# Plot values of first 10 features\n",
    "data_plot=data.iloc[:,:10]\n",
    "data_plot.boxplot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualisation as images\n",
    "\n",
    "Although any human won't be able to make sense of those images, it is by far simpler and faster for computers to correctly recognize those \"images\" and assign them their correct classes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 6 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.image as mpimg\n",
    "\n",
    "num_toshow = 6\n",
    "fig, _axs = plt.subplots(nrows=2, ncols=3, figsize=(10,10))\n",
    "fig.subplots_adjust(hspace=0.3)\n",
    "axs = _axs.flatten()\n",
    "\n",
    "for i in range(num_toshow):\n",
    "    img = data.iloc[i].values[:-1].reshape(32, 32)\n",
    "    label = data.values[i][-1:]\n",
    "    axs[i].set_title('Example of {}'.format(label))\n",
    "    axs[i].imshow(img.astype(float))\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Step 2: Building a predictive model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use DataManager to separate data for train, validation and test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Info file found : /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_public.info\n",
      "DataManager : Areal\n",
      "info:\n",
      "\tusage = Sample dataset Areal preprocessed data\n",
      "\tname = areal\n",
      "\ttask = multiclass.classification\n",
      "\ttarget_type = Categorical\n",
      "\tfeat_type = Numerical\n",
      "\tmetric = accuracy\n",
      "\ttime_budget = 12000\n",
      "\tfeat_num = 1024\n",
      "\ttarget_num = 13\n",
      "\tlabel_num = 13\n",
      "\ttrain_num = 300\n",
      "\tvalid_num = 150\n",
      "\ttest_num = 150\n",
      "\thas_categorical = 0\n",
      "\thas_missing = 0\n",
      "\tis_sparse = 0\n",
      "\tformat = dense\n",
      "data:\n",
      "\tX_train = array(300, 1024)\n",
      "\tY_train = array(300, 1)\n",
      "\tX_valid = array(150, 1024)\n",
      "\tY_valid = array(150, 1)\n",
      "\tX_test = array(150, 1024)\n",
      "\tY_test = array(150, 1)\n",
      "feat_type:\tarray(1024,)\n",
      "feat_idx:\tarray(0,)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from data_manager import DataManager\n",
    "D = DataManager(data_name, data_dir)\n",
    "print(D)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get data and labels by calling D.data (DataManager.data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = D.data['X_train']\n",
    "Y_train = D.data['Y_train']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The model is a simpler version of the decision tree algorithm of sklearn.\n",
    "\n",
    "You can only change the parameter max_depth which has a default value of 5.\n",
    "\n",
    "If you changed the file model.py and want to test it in the notebook, you can uncomment and run the next cell."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'model' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-16-e5098e3d8f61>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mimportlib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mreload\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mreload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'model' is not defined"
     ]
    }
   ],
   "source": [
    "from importlib import reload\n",
    "reload(model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "from model import SimpleDecisionTree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = SimpleDecisionTree()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Fit the model\n",
    "\n",
    "Data as first argument, Labels as second, with .reshape(-1) to make sure that the array containing labels is flat and don't have multiple dimensions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "FIT: dim(X)= [300, 1024]\n",
      "FIT: dim(y)= [300, 1]\n"
     ]
    }
   ],
   "source": [
    "M.fit(X_train, Y_train.reshape(-1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PREDICT: dim(X)= [300, 1024]\n",
      "PREDICT: dim(y)= [300, 1]\n",
      "PREDICT: dim(X)= [150, 1024]\n",
      "PREDICT: dim(y)= [150, 1]\n",
      "PREDICT: dim(X)= [150, 1024]\n",
      "PREDICT: dim(y)= [150, 1]\n"
     ]
    }
   ],
   "source": [
    "Y_hat_train = M.predict(D.data['X_train'])\n",
    "Y_hat_valid = M.predict(D.data['X_valid'])\n",
    "Y_hat_test = M.predict(D.data['X_test'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sample_result_submission/Areal_test.predict\r\n",
      "sample_result_submission/Areal_train.predict\r\n",
      "sample_result_submission/Areal_valid.predict\r\n"
     ]
    }
   ],
   "source": [
    "# m.save(trained_model_name)                 \n",
    "result_name = result_dir + data_name\n",
    "from data_io import write\n",
    "from data_io import mkdir\n",
    "mkdir(result_dir)\n",
    "\n",
    "write(result_name + '_train.predict', Y_hat_train)\n",
    "write(result_name + '_valid.predict', Y_hat_valid)\n",
    "write(result_name + '_test.predict', Y_hat_test)\n",
    "!ls $result_name*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can zip those three files in the same archive and submit this to the challenge on codalab"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Scoring predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using scoring metric: accuracy\n"
     ]
    }
   ],
   "source": [
    "from libscores import get_metric\n",
    "metric_name, scoring_function = get_metric()\n",
    "print('Using scoring metric:', metric_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ideal score for the accuracy metric = 1.0000 \n",
      "\n",
      "Scores with BaselineModel\n",
      "Training score for the accuracy metric = 0.5233\n",
      "Validation score for the accuracy metric = 0.4133\n",
      "Test score for the accuracy metric = 0.3733\n"
     ]
    }
   ],
   "source": [
    "print('Ideal score for the', metric_name, 'metric = %5.4f' % scoring_function(Y_train, Y_train), \"\\n\")\n",
    "\n",
    "print(\"Scores with BaselineModel\")\n",
    "print('Training score for the', metric_name, 'metric = %5.4f' % scoring_function(Y_train, Y_hat_train))\n",
    "if len(D.data['Y_valid'] > 0) and len(D.data['Y_test'] > 0):\n",
    "    print('Validation score for the', metric_name, 'metric = %5.4f' % scoring_function(D.data['Y_valid'], Y_hat_valid))\n",
    "    print('Test score for the', metric_name, 'metric = %5.4f' % scoring_function(D.data['Y_test'], Y_hat_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Keep in mind that the provided model is one that heavily overfits so you shouldn't look too much at the training score.\n",
    "\n",
    "Using cross-validation (see a bit below) will give more significant results."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Confusion matrix\n",
    "\n",
    "Doesn't have much value on train with a 100% accuracy, but it can be good to look at if you change your model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 8,  0,  0,  0,  6,  2,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 0, 19,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 7,  0,  1,  0,  8,  1,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 4,  0,  0, 18,  0,  1,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 1,  0,  0,  0, 26,  0,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 5,  0,  0,  0,  0, 23,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 0,  0,  1,  0,  5,  0, 20,  0,  0,  0,  0,  0,  0],\n",
       "       [ 0,  0,  0,  0,  5,  0,  0, 16,  0,  0,  0,  0,  0],\n",
       "       [ 7,  0,  0,  0, 14,  0,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 1,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 0,  0,  0,  0,  5,  0,  0,  0,  0,  0, 26,  0,  0],\n",
       "       [ 1,  0,  0,  0, 21,  0,  0,  0,  0,  0,  0,  0,  0],\n",
       "       [ 3,  0,  0,  0, 18,  0,  0,  0,  0,  0,  0,  0,  0]])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "confusion_matrix(Y_train, Y_hat_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Cross-validation\n",
    "\n",
    "Because validation and test labels should first not be available, we do cross validation to see our models quality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "FIT: dim(X)= [240, 1024]\n",
      "FIT: dim(y)= [240, 1]\n",
      "PREDICT: dim(X)= [60, 1024]\n",
      "PREDICT: dim(y)= [60, 1]\n",
      "FIT: dim(X)= [240, 1024]\n",
      "FIT: dim(y)= [240, 1]\n",
      "PREDICT: dim(X)= [60, 1024]\n",
      "PREDICT: dim(y)= [60, 1]\n",
      "FIT: dim(X)= [240, 1024]\n",
      "FIT: dim(y)= [240, 1]\n",
      "PREDICT: dim(X)= [60, 1024]\n",
      "PREDICT: dim(y)= [60, 1]\n",
      "FIT: dim(X)= [240, 1024]\n",
      "FIT: dim(y)= [240, 1]\n",
      "PREDICT: dim(X)= [60, 1024]\n",
      "PREDICT: dim(y)= [60, 1]\n",
      "FIT: dim(X)= [240, 1024]\n",
      "FIT: dim(y)= [240, 1]\n",
      "PREDICT: dim(X)= [60, 1024]\n",
      "PREDICT: dim(y)= [60, 1]\n",
      "\n",
      "CV score (95 perc. CI): 0.45 (+/- 0.07)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import make_scorer\n",
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "scores = cross_val_score(M, X_train, Y_train.ravel(), cv=5, scoring=make_scorer(scoring_function))\n",
    "print('\\nCV score (95 perc. CI): %0.2f (+/- %0.2f)' % (scores.mean(), scores.std() * 2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Submission\n",
    "\n",
    "## Example\n",
    "\n",
    "Example needs to have python3 installed\n",
    "\n",
    "Test to see whether submission with ingestion program is working"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using input_dir: /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data\n",
      "Using output_dir: /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_result_submission\n",
      "Using program_dir: /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/ingestion_program\n",
      "Using submission_dir: /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_code_submission\n",
      "\n",
      "========== Ingestion program version 6 ==========\n",
      "\n",
      "************************************************\n",
      "******** Processing dataset Areal ********\n",
      "************************************************\n",
      "========= Reading and converting data ==========\n",
      "Info file found : /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_public.info\n",
      "========= Reading /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_feat.type\n",
      "[+] Success in  0.00 sec\n",
      "========= Reading /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_train.data\n",
      "Replace missing values by 0 (slow, sorry)\n",
      "[+] Success in  0.14 sec\n",
      "========= Reading /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_train.solution\n",
      "[+] Success in  0.00 sec\n",
      "========= Reading /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_valid.data\n",
      "Replace missing values by 0 (slow, sorry)\n",
      "[+] Success in  0.07 sec\n",
      "========= Reading /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_valid.solution\n",
      "[+] Success in  0.00 sec\n",
      "========= Reading /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_test.data\n",
      "Replace missing values by 0 (slow, sorry)\n",
      "[+] Success in  0.07 sec\n",
      "========= Reading /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_data/Areal_test.solution\n",
      "[+] Success in  0.00 sec\n",
      "DataManager : Areal\n",
      "info:\n",
      "\tusage = Sample dataset Areal preprocessed data\n",
      "\tname = areal\n",
      "\ttask = multiclass.classification\n",
      "\ttarget_type = Categorical\n",
      "\tfeat_type = Numerical\n",
      "\tmetric = accuracy\n",
      "\ttime_budget = 12000\n",
      "\tfeat_num = 1024\n",
      "\ttarget_num = 13\n",
      "\tlabel_num = 13\n",
      "\ttrain_num = 300\n",
      "\tvalid_num = 150\n",
      "\ttest_num = 150\n",
      "\thas_categorical = 0\n",
      "\thas_missing = 0\n",
      "\tis_sparse = 0\n",
      "\tformat = dense\n",
      "data:\n",
      "\tX_train = array(300, 1024)\n",
      "\tY_train = array(300, 1)\n",
      "\tX_valid = array(150, 1024)\n",
      "\tY_valid = array(150, 1)\n",
      "\tX_test = array(150, 1024)\n",
      "\tY_test = array(150, 1)\n",
      "feat_type:\tarray(1024,)\n",
      "feat_idx:\tarray(1024,)\n",
      "\n",
      "[+] Size of uploaded data  56.00 bytes\n",
      "[+] Cumulated time budget (all tasks so far)  12000.00 sec\n",
      "[+] Time budget for this task 12000.00 sec\n",
      "[+] Remaining time after reading data 11999.72 sec\n",
      "======== Creating model ==========\n",
      "**********************************************************\n",
      "****** Attempting to reload model to avoid training ******\n",
      "**********************************************************\n",
      "Model reloaded from: /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_code_submission/Areal_model.pickle\n",
      "[+] Model reloaded, no need to train!\n",
      "PREDICT: dim(X)= [300, 1024]\n",
      "PREDICT: dim(y)= [300, 1]\n",
      "PREDICT: dim(X)= [150, 1024]\n",
      "PREDICT: dim(y)= [150, 1]\n",
      "PREDICT: dim(X)= [150, 1024]\n",
      "PREDICT: dim(y)= [150, 1]\n",
      "[+] Prediction success, time spent so far  0.28 sec\n",
      "======== Saving results to: /home/keanu/Documents/CoursMPI/M2/Projet/Remote-Sensing-Image/starting_kit_preprocessed/sample_result_submission\n",
      "[+] Results saved, time spent so far  0.28 sec\n",
      "[+] End cycle, time left 11999.72 sec\n",
      "[+] Done\n",
      "[+] Overall time spent  0.92 sec ::  Overall time budget 12000.00 sec\n"
     ]
    }
   ],
   "source": [
    "!python3 $problem_dir/ingestion.py $data_dir $result_dir $problem_dir $model_dir"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test scoring program"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "======= Set 1 (Areal_test): accuracy(set1_score)=0.566666666667 =======\r\n",
      "======= Set 2 (Areal_train): accuracy(set2_score)=0.573333333333 =======\r\n",
      "======= Set 3 (Areal_valid): accuracy(set3_score)=0.653333333333 =======\r\n"
     ]
    }
   ],
   "source": [
    "scoring_output_dir = 'scoring_output'\n",
    "!python3 $score_dir/score.py $data_dir $result_dir $scoring_output_dir"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Prepare the submission"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submit one of these files:\n",
      "./sample_code_submission_prep_19-01-23-10-38.zip\n",
      "./sample_result_submission_prep_19-01-23-10-38.zip\n"
     ]
    }
   ],
   "source": [
    "import datetime \n",
    "from data_io import zipdir\n",
    "the_date = datetime.datetime.now().strftime(\"%y-%m-%d-%H-%M\")\n",
    "sample_code_submission = './sample_code_submission_prep_' + the_date + '.zip'\n",
    "sample_result_submission = './sample_result_submission_prep_' + the_date + '.zip'\n",
    "zipdir(sample_code_submission, model_dir)\n",
    "zipdir(sample_result_submission, result_dir)\n",
    "print(\"Submit one of these files:\\n\" + sample_code_submission + \"\\n\" + sample_result_submission)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
